﻿using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Model;

namespace DataAccess
{
    public class ColaboradorDataAccess
    {
        public Colaborador ObtenerColaborador(int idColaborador)
        {
            var colaborador = new Colaborador();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerColaboradorPorId",
                    new[] { new SqlParameter("IdColaborador", idColaborador) }))
            {
                while (dataReader.Read())
                {
                    colaborador = CreateEntity(dataReader);
                }
                dataReader.Close();
            }
            return colaborador;
        }

        public Colaborador ObtenerColaboradorPorDocumento(int documento)
        {
            var colaborador = new Colaborador();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerColaboradorPorDocumento",
                    new[] { new SqlParameter("Documento", documento) }))
            {
                while (dataReader.Read())
                {
                    colaborador = CreateEntity(dataReader);
                }
                dataReader.Close();
            }
            return colaborador;
        }

        public IList<Colaborador> ObtenerColaboradores(bool estado)
        {
            var colaborador = new List<Colaborador>();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerColaboradores",
                new[] { new SqlParameter("Estado", estado ? "A" : "I") }))
            {
                while (dataReader.Read())
                {
                    colaborador.Add(CreateEntity(dataReader));
                }
                dataReader.Close();
            }
            return colaborador;
        }

        public void InsertarEditarColaborador(Colaborador colaborador)
        {
            SqlHelper.ExecuteNonQuery(CommandType.StoredProcedure, "InsertarEditarColaborador",
                new[]
                {
                    new SqlParameter("IdColaborador", colaborador.IdColaborador),
                    new SqlParameter("DocumentoIdentidad", colaborador.DocumentoIdentidad),
                    new SqlParameter("TipoDocumento", colaborador.TipoDocumento),
                    new SqlParameter("Nombres", colaborador.Nombres),
                    new SqlParameter("Apellidos", colaborador.Apellidos),
                    new SqlParameter("Telefono", colaborador.Telefono),
                    new SqlParameter("Domicilio", colaborador.Domicilio)
                });
        }

        private Colaborador CreateEntity(IDataReader dataReader)
        {
            return new Colaborador()
            {
                IdColaborador = SqlHelper.GetInt(dataReader, 0),
                DocumentoIdentidad = SqlHelper.GetInt(dataReader, 1),
                TipoDocumento = SqlHelper.GetString(dataReader, 2),
                Nombres = SqlHelper.GetString(dataReader, 3),
                Apellidos = SqlHelper.GetString(dataReader, 4),
                Telefono = SqlHelper.GetString(dataReader, 5),
                Domicilio = SqlHelper.GetString(dataReader, 6),
                Estado = (SqlHelper.GetString(dataReader, 7) == "A")
            };
        }

        public void InactivarColaborador(int idColaborador)
        {
            SqlHelper.ExecuteNonQuery(CommandType.StoredProcedure, "InactivarColaborador",
                new[]
                {
                    new SqlParameter("IdColaborador", idColaborador)
                });
        }

        public void AactivarColaborador(int idColaborador)
        {
            SqlHelper.ExecuteNonQuery(CommandType.StoredProcedure, "ActivarColaborador",
                new[]
                {
                    new SqlParameter("IdColaborador", idColaborador)
                });
        }
    }
}

